In [ ]:
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
我確定好了幾個測試主題:
- 自動控制系統觀念
- 材料力學概念
- 程式生成(C#,Python,Matlab)
- 程式除錯(C#,Python,Matlab)
每個關卡都有分基礎題、進階題、應用題三大部分
以下三種LLM為本次測驗的參賽者:
- ChatGPT (GPT-4o mini)
- Claude(Claude 3.7 Sonnet)
- Gemini(Google Gemini 2.0 Flash)
以下四點為評估模型表現的重點
- 準確性:模型的回答是否正確?是否有錯誤的知識?
- 完整度:回答是否詳細,是否能涵蓋關鍵概念?
- 表達能力:模型的回答是否清晰易懂?
- 創意性:模型是否能提供有趣的觀點或應用?
為確保測試公平性,一律使用新的對話測試
並一律使用以下格式貼 Prompt(為避免報告太長,回答一律盡量簡單) :
請用繁體中文簡短回答以下問題
「(在此貼上問題)」
==========================測試開始==========================¶
第一位參賽者:ChatGPT¶
基礎題回答內容截圖,以及輸出內容截圖¶
進階題回答內容截圖,以及輸出內容截圖¶
應用題回答內容截圖,以及輸出內容截圖¶
總評價:¶
- 內容準確性:5/5
- 內容完整度:4/5
- 表達能力:5/5
- 創意性:4/5
第二位參賽者:Claude¶
基礎題回答內容截圖,以及輸出內容截圖¶
進階題回答內容截圖,以及輸出內容截圖¶
應用題回答內容截圖,以及輸出內容截圖¶
總評價:¶
- 內容準確性:5/5
- 內容完整度:5/5
- 表達能力:5/5
- 創意性:5/5
第三位參賽者:Gemini¶
基礎題回答內容截圖,以及輸出內容截圖¶
進階題回答內容截圖,以及輸出內容截圖¶
應用題回答內容截圖,以及輸出內容截圖¶
總評價:¶
- 內容準確性:5/5
- 內容完整度:3/5
- 表達能力:4/5
- 創意性:3/5
第一位參賽者:ChatGPT¶
基礎題回答內容截圖,以及輸出內容截圖¶
進階題回答內容截圖,以及輸出內容截圖¶
應用題回答內容截圖,以及輸出內容截圖¶
總評價:¶
- 內容準確性:5/5
- 內容完整度:4/5
- 表達能力:4/5
- 創意性:4/5
第二位參賽者:Claude¶
基礎題回答內容截圖,以及輸出內容截圖¶
進階題回答內容截圖,以及輸出內容截圖¶
應用題回答內容截圖,以及輸出內容截圖¶
總評價:¶
- 內容準確性:5/5
- 內容完整度:5/5
- 表達能力:4/5
- 創意性:5/5
第三位參賽者:Gemini¶
基礎題回答內容截圖,以及輸出內容截圖¶
進階題回答內容截圖,以及輸出內容截圖¶
應用題回答內容截圖,以及輸出內容截圖¶
總評價:¶
- 內容準確性:4/5
- 內容完整度:3/5
- 表達能力:5/5
- 創意性:5/5
第一位參賽者:ChatGPT¶
基礎題回答內容截圖,以及輸出內容截圖¶
In [ ]:
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
# 範例使用
n = 10
print(f"第 {n} 項費氏數列為: {fibonacci(n)}")
第 10 項費氏數列為: 55
進階題回答內容截圖,以及輸出內容截圖¶
應用題回答內容截圖,以及輸出內容截圖¶
總評價:¶
- 內容準確性:4/5
- 內容完整度:3/5
- 表達能力:5/5
- 創意性:4/5
第二位參賽者:Claude¶
基礎題回答內容截圖,以及輸出內容截圖¶
In [ ]:
def fibonacci(n):
if n <= 0:
return "請輸入正整數"
elif n == 1:
return 0
elif n == 2:
return 1
else:
a, b = 0, 1
for _ in range(3, n+1):
a, b = b, a + b
return b
# 測試程式
n = 10
print(f"費氏數列第 {n} 項為: {fibonacci(n)}")
費氏數列第 10 項為: 34
進階題回答內容截圖,以及輸出內容截圖¶
應用題回答內容截圖,以及輸出內容截圖¶
總評價:¶
- 內容準確性:5/5
- 內容完整度:5/5
- 表達能力:5/5
- 創意性:5/5
第三位參賽者:Gemini¶
基礎題回答內容截圖,以及輸出內容截圖¶
In [ ]:
def fibonacci(n):
if n <= 0:
return []
elif n == 1:
return [0]
else:
list_fib = [0, 1]
while len(list_fib) < n:
next_fib = list_fib[-1] + list_fib[-2]
list_fib.append(next_fib)
return list_fib
# 範例:計算前 10 個費氏數列
print(fibonacci(10))
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
進階題回答內容截圖,以及輸出內容截圖¶
應用題回答內容截圖,以及輸出內容截圖¶
總評價:¶
- 內容準確性:5/5
- 內容完整度:4/5
- 表達能力:5/5
- 創意性:4/5
測試關卡(四):程式除錯(C#、Python、Matlab)¶
基礎題:¶
- 這段 C# 程式碼有錯誤,請修正:
int x = null;
Console.WriteLine(x);
- 這段 Python 程式碼有錯誤,請找出並修正:
num = "10"
result = num + 5
print(result)
進階題:¶
- 這段 Python 程式碼會造成記憶體洩漏(memory leak),請找出問題並修正:
lst = []
while True:
lst.append("leak")
應用題:¶
- 這段 Matlab 程式碼運行效率低,請優化:
A = rand(20000, 20000);
B = zeros(20000, 1);
for i = 1:20000
B(i) = sum(A(i, :));
end
第一位參賽者:ChatGPT¶
基礎題回答內容截圖,以及輸出內容截圖¶
In [ ]:
num = "10"
result = int(num) + 5
print(result)
15
進階題回答內容截圖,以及輸出內容截圖¶
In [ ]:
#原本的錯誤程式碼,會導致記憶體用盡的錯誤
lst = []
while True:
lst.append("leak")
--------------------------------------------------------------------------- KeyboardInterrupt Traceback (most recent call last) <ipython-input-37-d3d8dad87ff3> in <cell line: 0>() 2 3 lst = [] ----> 4 while True: 5 lst.append("leak") KeyboardInterrupt:
In [ ]:
#修正範例1
lst = []
for _ in range(1000): # 限制迴圈次數
lst.append("leak")
In [ ]:
#修正範例2
def leak_generator():
while True:
yield "leak"
gen = leak_generator()
for _ in range(1000): # 控制迴圈次數
next(gen)
應用題回答內容截圖,以及輸出內容截圖¶
上圖為執行原本的程式碼,花的時間為8.842秒
上圖為執行改善的程式碼,花的時間為3.255秒
總評價:¶
- 內容準確性:5/5
- 內容完整度:3/5
- 表達能力:5/5
- 創意性:4/5
第二位參賽者:Claude¶
基礎題回答內容截圖,以及輸出內容截圖¶
(第一個修正程式碼和ChatGPT相同,所以就只有附上第二個修正程式碼)
In [ ]:
num = "10"
result = int(num) + 5
print(result)
進階題回答內容截圖,以及輸出內容截圖¶
In [ ]:
#Claude 修正的程式碼-1
lst = []
max_size = 1000 # 設定一個最大大小
while len(lst) < max_size:
lst.append("leak")
In [ ]:
#Claude 修正的程式碼-2
lst = []
while True:
lst.append("leak")
if len(lst) >= 1000:
lst = [] # 清空列表,避免記憶體洩漏
應用題回答內容截圖,以及輸出內容截圖¶
(和ChatGPT修正的程式碼相同)
總評價:¶
- 內容準確性:5/5
- 內容完整度:5/5
- 表達能力:5/5
- 創意性:5/5
第三位參賽者:Gemini¶
基礎題回答內容截圖,以及輸出內容截圖¶
In [ ]:
num = "10"
result = int(num) + 5
print(result)
In [ ]:
num = "10"
result = num + str(5)
print(result)
進階題回答內容截圖,以及輸出內容截圖¶
In [ ]:
#第一個修正方案:限制迴圈次數
lst = []
count = 0
while count < 1000: # 例如,限制迴圈 1000 次
lst.append("leak")
count += 1
In [ ]:
#第二個修正方案:設定list的最大長度
lst = []
max_length = 1000 # 設定最大長度
while True:
lst.append("leak")
if len(lst) > max_length:
del lst[0] # 刪除第一個元素
應用題回答內容截圖,以及輸出內容截圖¶
(和ChatGPT與Claude修正的程式碼相同)
總評價:¶
- 內容準確性:5/5
- 內容完整度:4/5
- 表達能力:4/5
- 創意性:4/5
==========================評估模型表現==========================¶
使用ChatGPT依照評分結果畫出長條圖
In [28]:
plt.rcParams['font.family'] = 'DejaVu Sans'
categories = ["Accuracy", "Completeness", "Expressive Ability", "Creativity"]
models = ["ChatGPT-4o", "Claude 3.7", "Gemini 2.0"]
tests = ["Automatic Control", "Material Mechanics", "Program Generation", "Program Debugging"]
scores = {
"ChatGPT-4o": [
[5, 4, 5, 4], # 自動控制系統觀念
[5, 4, 4, 4], # 材料力學概念
[4, 3, 5, 4], # 程式生成
[5, 3, 5, 4], # 程式除錯
],
"Claude 3.7": [
[5, 5, 5, 5],
[5, 5, 4, 5],
[5, 5, 5, 5],
[5, 5, 5, 5],
],
"Gemini 2.0": [
[5, 3, 4, 3],
[4, 3, 5, 5],
[5, 4, 5, 4],
[5, 4, 4, 4],
],
}
colors = ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728"]
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
fig.suptitle("LLM Test Scoring Results", fontsize=16)
for i, test in enumerate(tests):
ax = axes[i // 2, i % 2]
x = np.arange(len(models))
width = 0.2
for j, category in enumerate(categories):
scores_for_category = [scores[model][i][j] for model in models]
ax.bar(x + j * width - 0.3, scores_for_category, width, label=category, color=colors[j])
ax.set_title(test, fontsize=14)
ax.set_xticks(x)
ax.set_xticklabels(models, fontsize=12)
ax.set_ylim(0, 5.5)
ax.legend()
plt.tight_layout(rect=[0, 0, 1, 0.96])
plt.show()
透過圖表分析每個LLM的優劣勢¶
| LLM | 最佳領域 | 優勢 | 缺點 |
|---|---|---|---|
| Claude 3.7 | 全能型 AI,擅長所有領域 | 高準確度、完整度強、表達能力優秀、創意高 | 可能過於詳盡,回應過長 |
| ChatGPT-4o | 適合需要清楚解釋的程式與工程概念 | 高準確度、表達能力好 | 完整度稍低,創意不及 Claude |
| Gemini 2.0 | 程式生成與材料力學表達能力佳 | 表達能力與創意良好,程式相關能力穩定 | 完整度較低,部分領域準確性稍低 |
==========================總結==========================¶
- Claude 3.7:需要最完整、最精確的答案(適合技術研究、學術應用)
- ChatGPT-4o:獲得清楚的解釋,且不希望回答過長(適合教學與學習)
- Gemini 2.0:關注程式開發,並希望獲得不同的創意思路
喜歡哪一個?¶
經過一段時間的使用及測試,我個人最喜歡 Claude,特別是在寫程式時。Claude 的強大之處在於,它不僅能夠準確地生成程式碼,還經常會額外提供一些意想不到的實用功能,讓開發變得更加高效。而且,它的錯誤率極低,這讓我在編寫與測試程式時更加放心。